package com.itheima.tliasmanagementspringboot.controller;


import com.itheima.tliasmanagementspringboot.annotation.OperateLog;
import com.itheima.tliasmanagementspringboot.pojo.Emp;
import com.itheima.tliasmanagementspringboot.dtos.PageDto;
import com.itheima.tliasmanagementspringboot.common.R;
import com.itheima.tliasmanagementspringboot.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 员工管理
 */
@RestController
@Slf4j//日志输出注解,哪里需要加哪里(类上),lombok提供
public class EmpController {

    @Autowired
    EmpService empService;

    /**
     * 功能: 员工列表查询
     * @return 统一的返回对象(R)
     */
    @GetMapping("/emps/list")
    public R queryAllEmp(){
        log.info("查询员工: {}, {}",1, 2 );//一个{}就是一个占位符,写到文件中去
        return R.ok(empService.queryAllEmpService());
    }
    /**
     * 功能: 员工列表查询,分页查询
     * @return 统一的返回对象(R)
     */
    @GetMapping("/emps")
    public R pageQueryEmp(PageDto pageDto){
        log.info("分页查询员工: {}", pageDto);//一个{}就是一个占位符,写到文件中去
        System.out.println("请求层:" + pageDto);
        return R.ok(empService.pageQueryEmpService(pageDto));
    }
    

    /**
     * 功能: 根据id查询员工信息
     * @return 统一返回对象(R)
     *
     */
    @GetMapping("emps/{id}")
    public R queryEmpByCondition(@PathVariable Integer id){
        log.info("根据id查询员工信息: {}", id);
        return R.ok(empService.queryEmpByConditionService(id));
    }

    /**
     * 功能: 根据id删除员工信息
     * @return 统一返回对象(R)
     *
     */
    @OperateLog
    @DeleteMapping("/emps/{ids}")
    public R deleteEmpById(@PathVariable Integer[] ids){
        log.info("根据id删除员工信息: {}", ids);
        empService.deleteEmpByIds(ids);
        return R.ok();
    }

    /**
     * 功能: 添加/插入一条员工信息
     * @return 统一返回对象(R)
     *
     */
    @OperateLog
    @PostMapping("/emps")
    public R insertEmp(@RequestBody Emp emp){
        log.info("添加/插入一条员工信息:");
        empService.insertEmpService(emp);
        return R.ok();
    }

    /**
     * 功能:根据id更新员工信息
     * @param emp :员工id
     * @return 统一返回对象R
     */
    @OperateLog
    @PutMapping("/emps")
    public R updateEmpById(@RequestBody Emp emp){
        log.info("根据id删除员工信息: {}", emp);
        empService.updateEmpByIdService(emp);
        return R.ok();
    }

}
